{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
{\comment Begining font list}
{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
}
{\comment begin colors}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\comment Beginning style list}
{\stylesheet
{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}
{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;}
{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;}
{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}
{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;}
{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}
{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;}
{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;}
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;}
{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;}
{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;}
{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;}
{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;}
{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;}
{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;}
{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;}
{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;}
{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;}
{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;}
{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;}
{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;}
{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;}
{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 9;}
{\s50\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext51 List Continue 0;}
{\s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext52 List Continue 1;}
{\s52\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext53 List Continue 2;}
{\s53\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext54 List Continue 3;}
{\s54\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext55 List Continue 4;}
{\s55\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext56 List Continue 5;}
{\s56\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext57 List Continue 6;}
{\s57\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext58 List Continue 7;}
{\s58\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 8;}
{\s59\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 9;}
{\s60\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext61 DescContinue 0;}
{\s61\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext62 DescContinue 1;}
{\s62\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext63 DescContinue 2;}
{\s63\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext64 DescContinue 3;}
{\s64\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext65 DescContinue 4;}
{\s65\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext66 DescContinue 5;}
{\s66\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext67 DescContinue 6;}
{\s67\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext68 DescContinue 7;}
{\s68\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 8;}
{\s69\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 9;}
{\s70\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext81 LatexTOC 0;}
{\s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext82 LatexTOC 1;}
{\s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext83 LatexTOC 2;}
{\s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext84 LatexTOC 3;}
{\s74\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext85 LatexTOC 4;}
{\s75\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext86 LatexTOC 5;}
{\s76\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext87 LatexTOC 6;}
{\s77\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext88 LatexTOC 7;}
{\s78\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 8;}
{\s79\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 9;}
{\s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext81 \sautoupd List Bullet 0;}
{\s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid \sbasedon0 \snext82 \sautoupd List Bullet 1;}
{\s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid \sbasedon0 \snext83 \sautoupd List Bullet 2;}
{\s83\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls4\adjustright \fs20\cgrid \sbasedon0 \snext84 \sautoupd List Bullet 3;}
{\s84\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls5\adjustright \fs20\cgrid \sbasedon0 \snext85 \sautoupd List Bullet 4;}
{\s85\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls6\adjustright \fs20\cgrid \sbasedon0 \snext86 \sautoupd List Bullet 5;}
{\s86\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls7\adjustright \fs20\cgrid \sbasedon0 \snext87 \sautoupd List Bullet 6;}
{\s87\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls8\adjustright \fs20\cgrid \sbasedon0 \snext88 \sautoupd List Bullet 7;}
{\s88\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls9\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 8;}
{\s89\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls10\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 9;}
{\s90\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext91 \sautoupd List Enum 0;}
{\s91\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext92 \sautoupd List Enum 1;}
{\s92\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext93 \sautoupd List Enum 2;}
{\s93\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext94 \sautoupd List Enum 3;}
{\s94\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext95 \sautoupd List Enum 4;}
{\s95\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;}
{\s96\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;}
{\s97\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext98 \sautoupd List Enum 7;}
{\s98\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 8;}
{\s99\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 9;}
}
{\comment begin body}
{\info 
{\title {\comment pam_quiz {\comment startProjectNumber }
 {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
1.0 \par
}{\comment endProjectNumber }
}pam_quiz}
{\comment Generated byDoxgyen. }
{\creatim \yr2008\mo12\dy22\hr22\min40\sec28}
}{\comment end of infoblock}
\pard\plain 
\sectd\pgnlcrm
{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}}
{\comment begin title page}
\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid 
\vertalc\qc\par\par\par\par\par\par\par
\pard\plain \s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid 
{\field\fldedit {\*\fldinst TITLE \\*MERGEFORMAT}{\fldrslt TITLE}}\par
\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid 
\par
\par\par\par\par\par\par\par\par\par\par\par\par
\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid 
{\field\fldedit {\*\fldinst AUTHOR \\*MERGEFORMAT}{\fldrslt AUTHOR}}\par
Version 1.0\par{\field\fldedit {\*\fldinst CREATEDATE \\*MERGEFORMAT}{\fldrslt CREATEDATE}}\par
\page\page{\comment End title page}
{\comment Table of contents}
\vertalt
\pard\plain 
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Table of Contents\par
\pard\plain \par
{\field\fldedit {\*\fldinst TOC \\f \\*MERGEFORMAT}{\fldrslt Table of contents}}\par
\pard\plain 
{\comment Beginning Body of RTF Document}
\sect \sbkpage \pgndec \pgnrestart
\sect \sectd \sbknone
{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}}

{\comment BeginRTFChapter}
\pard\plain \sect\sbkpage
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid 
Data Structure Index\par \pard\plain 
{\tc \v Data Structure Index}
{\comment begin include annotated.rtf}
{\comment startTitleHead}
\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
Data Structures{\comment endTitleHead}
\par \pard\plain 
{\comment startTextBlock}
{
\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here are the data structures with brief descriptions:{\comment endTextBlock}
}
{\comment (startIndexList)}
{
\par
\pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid 
{\comment (startIndexKey)}
{\b {\b Question}{\comment (endIndexKey)}
{\comment (startIndexValue)}
 {\comment (endIndexValue)}
} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAJ \\*MERGEFORMAT}{\fldrslt pagenum}}
{\comment (newParagraph)}
\par
{\comment (endIndexList)}
\par}{\comment endFile}
{\comment end include annotated.rtf}

{\comment BeginRTFChapter}
\pard\plain \sect\sbkpage
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid 
File Index\par \pard\plain 
{\tc \v File Index}
{\comment begin include files.rtf}
{\comment startTitleHead}
\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
File List{\comment endTitleHead}
\par \pard\plain 
{\comment startTextBlock}
{
\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all files with brief descriptions:{\comment endTextBlock}
}
{\comment (startIndexList)}
{
\par
\pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid 
{\comment (startIndexKey)}
{\b /Users/hitokiri/Documents/Code/pam_quizc/{\b main.c}{\comment (endIndexKey)}
{\comment (startIndexValue)}
 {\comment (endIndexValue)}
} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAA \\*MERGEFORMAT}{\fldrslt pagenum}}
{\comment (newParagraph)}
\par
{\comment (startIndexKey)}
{\b /Users/hitokiri/Documents/Code/pam_quizc/{\b pam_quiz.c}{\comment (endIndexKey)}
{\comment (startIndexValue)}
 {\comment (endIndexValue)}
} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAD \\*MERGEFORMAT}{\fldrslt pagenum}}
{\comment (newParagraph)}
\par
{\comment (endIndexList)}
\par}{\comment endFile}
{\comment end include files.rtf}

{\comment BeginRTFChapter}
\pard\plain \sect\sbkpage
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid 
Data Structure Documentation{\tc \v Data Structure Documentation}
\par \pard\plain 
{\comment begin include struct_question.rtf}
{\comment startTitleHead}
\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
Question Struct Reference{\comment endTitleHead}
\par \pard\plain 
{\tc\tcl2 \v Question}
{\xe \v Question}
{\comment writeAnchor (struct_question)}
{\bkmkstart AAAAAAAAAJ}
{\bkmkend AAAAAAAAAJ}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Data Fields{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
char {\b question} [9]{\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
char {\b answer} [4]{\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Detailed Description{\comment endGroupHeader}
\par
\pard\plain 
{\comment startTextBlock}
{
\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
A structure to contain a question. This structure contains the question as a string, and the answer as a string. So far they are hard-coded for being simple math questions. Future work would include making them dynamic. for other question types. \par
}{\comment endTextBlock}
}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Field Documentation{\comment endGroupHeader}
\par
\pard\plain 
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v answer\:Question}
{\xe \v Question\:answer}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
char {\b Question::answer}{\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAK}
{\bkmkend AAAAAAAAAK}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
This contains the answer. It is 4 characters for division. 1.20 for example \par
}}
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v question\:Question}
{\xe \v Question\:question}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
char {\b Question::question}{\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAL}
{\bkmkend AAAAAAAAAL}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
Holds a string like "x + y = " \par
}}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
The documentation for this struct was generated from the following files:{\comment (startItemList level=0) }
{{\comment (writeListItem)}
{\comment (newParagraph)}
\par
\pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid 
/Users/hitokiri/Documents/Code/pam_quizc/{\b main.c}{\comment (writeListItem)}
{\comment (newParagraph)}
\par
\pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid 
/Users/hitokiri/Documents/Code/pam_quizc/{\b pam_quiz.c}{\comment (newParagraph)}
\par
{\comment (endItemList level=1)}
}{\comment endFile}
{\comment end include struct_question.rtf}

{\comment BeginRTFChapter}
\pard\plain \sect\sbkpage
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid 
File Documentation{\tc \v File Documentation}
\par \pard\plain 
{\comment begin include main_8c.rtf}
{\comment startTitleHead}
\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
/Users/hitokiri/Documents/Code/pam_quizc/main.c File Reference{\comment endTitleHead}
\par \pard\plain 
{\tc\tcl2 \v /Users/hitokiri/Documents/Code/pam_quizc/main.c}
{\xe \v /Users/hitokiri/Documents/Code/pam_quizc/main.c}
{\comment writeAnchor (main_8c)}
{\bkmkstart AAAAAAAAAA}
{\bkmkend AAAAAAAAAA}
{\comment startTextBlock}
{
\pard\plain \s18\widctlpar\fs22\cgrid {\f2 #include <time.h>}{\comment (lineBreak)}
\par
{\f2 #include <stdlib.h>}{\comment (lineBreak)}
\par
{\f2 #include <string.h>}{\comment (lineBreak)}
\par
{\f2 #include <syslog.h>}{\comment (lineBreak)}
\par
{\f2 #include <stdio.h>}{\comment (lineBreak)}
\par
{\comment endTextBlock}
}
{\comment startTextBlock}
{
\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\comment (newParagraph)}
\par
{\comment (startInclDepGraph)}
Include dependency graph for main.c:{
\pard\plain 
\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "main_8c__incl.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
}
{\comment (endInclDepGraph)}
{\comment (newParagraph)}
\par
{\comment endTextBlock}
}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Data Structures{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
struct {\b Question}{\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Functions{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
void {\b makeMathQuestion} (struct {\b Question} *){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
int {\b main} (){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Function Documentation{\comment endGroupHeader}
\par
\pard\plain 
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v main\:main.c}
{\xe \v main.c\:main}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
int main (){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAB}
{\bkmkend AAAAAAAAAB}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
}
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v makeMathQuestion\:main.c}
{\xe \v main.c\:makeMathQuestion}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
void makeMathQuestion ({\comment (startParameterList)}
struct {\b Question} * {\i q}){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAC}
{\bkmkend AAAAAAAAAC}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
}
{\comment endFile}
{\comment end include main_8c.rtf}
\par \pard\plain 

{\comment BeginRTFSection}
\pard\plain \sect\sbkpage
\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
{\comment begin include pam__quiz_8c.rtf}
{\comment startTitleHead}
\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid 
/Users/hitokiri/Documents/Code/pam_quizc/pam_quiz.c File Reference{\comment endTitleHead}
\par \pard\plain 
{\tc\tcl2 \v /Users/hitokiri/Documents/Code/pam_quizc/pam_quiz.c}
{\xe \v /Users/hitokiri/Documents/Code/pam_quizc/pam_quiz.c}
{\comment writeAnchor (pam__quiz_8c)}
{\bkmkstart AAAAAAAAAD}
{\bkmkend AAAAAAAAAD}
{\comment startTextBlock}
{
\pard\plain \s18\widctlpar\fs22\cgrid {\f2 #include <stdlib.h>}{\comment (lineBreak)}
\par
{\f2 #include <time.h>}{\comment (lineBreak)}
\par
{\f2 #include <stdio.h>}{\comment (lineBreak)}
\par
{\f2 #include <string.h>}{\comment (lineBreak)}
\par
{\f2 #include <syslog.h>}{\comment (lineBreak)}
\par
{\f2 #include <security/pam_modules.h>}{\comment (lineBreak)}
\par
{\comment endTextBlock}
}
{\comment startTextBlock}
{
\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\comment (newParagraph)}
\par
{\comment (startInclDepGraph)}
Include dependency graph for pam_quiz.c:{
\pard\plain 
\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "pam__quiz_8c__incl.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par
}
{\comment (endInclDepGraph)}
{\comment (newParagraph)}
\par
{\comment endTextBlock}
}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Data Structures{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
struct {\b Question}{\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Defines{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
#define {\b PAM_SM_ACCOUNT}{\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Functions{\comment endGroupHeader}
\par
\pard\plain 

{\comment (startMemberList) }
{
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
void {\b setMessage} (int type, const char *, struct pam_message *){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
int {\b converse} (pam_handle_t *pamh, int args, struct pam_message **message, struct pam_response **repsonse){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
void {\b makeMathQuestion} (struct {\b Question} *){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment startMemberItem }
\pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 
PAM_EXTERN int {\b pam_sm_acct_mgmt} (pam_handle_t *pamh, int flags, int argc, const char **argvc){\comment endMemberItem }
{\comment (newParagraph)}
\par
{\comment (endMemberList) }
}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Define Documentation{\comment endGroupHeader}
\par
\pard\plain 
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v PAM_SM_ACCOUNT\:pam_quiz.c}
{\xe \v pam_quiz.c\:PAM_SM_ACCOUNT}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
#define PAM_SM_ACCOUNT{\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAE}
{\bkmkend AAAAAAAAAE}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
This define tells the PAM system that this is an account module \par
}}
{\comment (rtfwriteRuler_thin)}
{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par}
{\comment startGroupHeader}
\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid 
Function Documentation{\comment endGroupHeader}
\par
\pard\plain 
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v converse\:pam_quiz.c}
{\xe \v pam_quiz.c\:converse}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
int converse ({\comment (startParameterList)}
pam_handle_t * {\i pamh}, {\comment (startParameterList)}
  int {\i args}, {\comment (startParameterList)}
  struct pam_message ** {\i message}, {\comment (startParameterList)}
  struct pam_response ** {\i repsonse}){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAF}
{\bkmkend AAAAAAAAAF}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
converse handles the pam_converse() funciton. Essentially this function is a wrapper to handle all communication from the module to the calling application. It checks for errors and sets the appropriate response structure for you. This was all pretty much taken straight from pam_stres.c\par
{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
Parameters:\par}
\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\i pamh} This is the pointer to the pam environment. \par
{\i args} This tells the converse function which message in teh message structure to use. Best just to use it as 1. \par
{\i response} is the response from the conversation. \par
}
{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid PAM_SUCCESS if everything works well, or various PAM errors otherwise. \par
}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid <security/pam_modules.h> \par
pam_stress.c \par
}}}
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v makeMathQuestion\:pam_quiz.c}
{\xe \v pam_quiz.c\:makeMathQuestion}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
void makeMathQuestion ({\comment (startParameterList)}
struct {\b Question} * {\i q}){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAG}
{\bkmkend AAAAAAAAAG}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
makeMathQuestion does the work of creating the mathQuestions to be asked. So The process is pretty straightforward. We generate some random numbers between 1 & 10. These numbers correspond to the question x + y = ? The operand used is also a random number generated as well. As of writing this, the division Operand is not used. It is a pain. {\par
{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
Parameters:\par}
\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\i q} A question structure used to hold the question and answer this function generates. \par
}
}}
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v pam_sm_acct_mgmt\:pam_quiz.c}
{\xe \v pam_quiz.c\:pam_sm_acct_mgmt}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
PAM_EXTERN int pam_sm_acct_mgmt ({\comment (startParameterList)}
pam_handle_t * {\i pamh}, {\comment (startParameterList)}
  int {\i flags}, {\comment (startParameterList)}
  int {\i argc}, {\comment (startParameterList)}
  const char ** {\i argvc}){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAH}
{\bkmkend AAAAAAAAAH}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
pam_sm_acct_mgmt is the method PAM will use to do account authorization. The purpose of this method is to simply ask questions to the user randomly and assess if they are human or not. What this boils down to is if they can get x out of y questions correct, they will be authorized.\par
{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
Parameters:\par}
\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\i pamh} This is the pam environment. The pam system sets this. \par
{\i flags} I don't have any use for these. \par
{\i argc} How many argments have been passed from various pam conf files. \par
{\i argvc} The argments array itself. \par
}
}{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
Order of Events: -1) Get a conversation function pointer to the application (Hopefully). -2) Generate question based on random numbers and flags (Future). -3) Build the conversation functions' message structure and response structure. -Note: Send only one message at a time. (Compatability) -4) Initiate the conversation. -5) Check the response structure for the correct answer. -6) Repeat if necessary (Future). -7) Free the response strucutre -8) Return our success or failure. \par
}}
{\comment startDoxyAnchor}
{\comment startMemberDoc}
{\xe \v setMessage\:pam_quiz.c}
{\xe \v pam_quiz.c\:setMessage}
\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid {
{\b 
void setMessage ({\comment (startParameterList)}
int {\i type}, {\comment (startParameterList)}
  const char * {\i msg}, {\comment (startParameterList)}
  struct pam_message * {\i message}){\comment endMemberDoc}
}
}{\comment (newParagraph)}
\par
{\comment endDoxyAnchor}
{\bkmkstart AAAAAAAAAI}
{\bkmkend AAAAAAAAAI}
{\comment (startIndent) }
{
\pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid 
{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 
{\b Pam_quiz.c} is a PAM module that serves a simple purpose. It is an account management module requries that users respond to simple (math) questions before being allowed to proceed. There are variables to adjust how many questions to ask as well as a percentage needed to be correct.\par
If one answers too few questions correctly, they will not be authorized, and if they do, they will be authorized. setMessage is a simple function that does the job to filling up the pam_message structure for me. It exists just out of convenience. {\par
{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid 
Parameters:\par}
\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\i type} This is a define from the pam headers for the conversation functions to use. \par
{\i msg} This is the string that you want sent to the user. \par
{\i message} This is the struct pam_message that is used to converse with.\par
}
setMessage simply does the job of setting up the message structure. Just here for convenience. \par
}}
{\comment endFile}
{\comment end include pam__quiz_8c.rtf}

{\comment BeginRTFChapter}
\pard\plain \sect\sbkpage
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid 
\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Index\par 
\pard\plain 
{\tc \v Index}
{\field\fldedit {\*\fldinst INDEX \\c2 \\*MERGEFORMAT}{\fldrslt INDEX}}
{\comment endFile}
}